package com.aiju.common.updade;

import android.content.Context;
import android.view.View;

import com.aiju.app.IDialogSimpleListener;

/**
 * @version V1.0
 * @FileName: com.app.john.update.UpdateManager.java
 * @author: 佐为
 * @date: 2016-10-27 10:41
 * @Description 版本更新主类
 * 执行流程
 * 1.检查版本 弹出提示界面。
 * 2.检索本地apk是否存在最新版本 是安装、否下载。
 * 3.下载过程状态栏显示进度,并保存本地。（可设置安装完成删除apk文件）
 */
public abstract class UpdateManager {

    protected Context mContext;

    public UpdateManager(Context context) {
        this.mContext = context;
    }

    /**
     * 检查更新应用
     */
    public void updateApp() {
        checkVersion(new IDialogSimpleListener() {
            @Override
            public void onCancel(View view) {

            }

            @Override
            public void onConfirm(View view) {
                showUpdateDialog(new IDialogSimpleListener() {

                    @Override
                    public void onCancel(View view) {
                        cancelUpdate();
                    }

                    @Override
                    public void onConfirm(View view) {
                        downloadApk();
                    }
                });
            }
        });

    }

    /**
     * 检查应用版本
     */
    protected abstract void checkVersion(IDialogSimpleListener listenr);

    /**
     * 显示更新提示
     *
     * @param listenr
     */
    protected abstract void showUpdateDialog(IDialogSimpleListener listenr);

    /**
     * 下载apk
     * 1.可本地检索apk文件是否有最新版本-->有：直接安装。否：下载执行2。
     * 2.建议使用服务IntentService 下载并在通知栏显示进度，可调控是否关闭。
     * <p>
     * IntentService代码包含了一个工作线程Thread、工作线程的Looper、工作线程的Handler。
     * 工作线程用来干活的，Looper用来让线程运转起来的，Handler负责向线程传送工作内容的
     */
    protected abstract void downloadApk();

    /**
     * 取消更新
     */
    protected abstract void cancelUpdate();

}
